package com.ybbase.framework.common.util;

import java.math.BigDecimal;

/**
 * 数字工具类
 *
 * @author baijingbin
 * @date 2019/9/5 5:20
 * @since 4.0
 */
public class NumberUtil {

    public static final String CURRENCY_FEN_REGULAR = "\\-?[0-9]+";
    /**
     * 身份证简易正则表达式
     */
    public static final String ID_CARD_REGULAR = "^(\\d{17})([0-9]|X|x)$";
    /**
     * 无符号数字正则表达式
     */
    public static final String NUMBER_REGULAR = "^[0-9]*$";
    /**
     * 手机号码简易正则表达式
     */
    public static final String MOBILE_REGULAR = "^1\\d{10}$";

    /**
     * 正整数
     */
    public static final String POSITIVE_INTEGER = "^[1-9]\\d*$";


    /**
     * 是否为数字
     *
     * @param str 要判断的字符串
     * @return true 如果符合全部数字正则验证
     * @since 4.0
     */
    public static boolean isNumber(String str) {
        return str.matches(NUMBER_REGULAR);
    }

    /**
     * 验证是否为正整数
     *
     * @param str 要判断的字符串
     * @return boolean true :正整数
     * @author baijingbin
     * @date 2019/9/24 9:34
     * @since 4.0
     */
    public static boolean isPositiveInt(String str) {
        return str.matches(POSITIVE_INTEGER);
    }

    /**
     * 是否为18位身份证号
     *
     * @param str 要判断的字符串
     * @return true 是
     * @since 4.0
     */
    public static boolean isIdCard(String str) {
        return str.matches(ID_CARD_REGULAR);
    }

    /**
     * 验证是否为手机号码
     *
     * @param mobile 手机号码
     * @return true 是
     * @since 4.0
     */
    public static boolean isMobile(String mobile) {
        return mobile.matches(MOBILE_REGULAR);
    }

    /**
     * 元转分
     *
     * @param amount 金额元
     * @return long 金额分
     * @author baijingbin
     * @since 4.0
     */
    public static long changeYuanToFen(String amount) {
        return BigDecimal.valueOf(Double.parseDouble(amount)).multiply(new BigDecimal(100)).longValue();
    }

    /**
     * 分转元
     *
     * @param amount 金额字符串，单位分
     * @return String  元
     * @throws Exception 异常
     * @since 4.0
     */
    public static String changeFenToYuan(String amount) throws Exception {
        if (!amount.matches(CURRENCY_FEN_REGULAR)) {
            throw new Exception("金额格式有误");
        }
        return BigDecimal.valueOf(Long.valueOf(amount)).divide(new BigDecimal(100)).toString();
    }

    /**
     * 厘转元
     *
     * @param amount 金额：厘
     * @return string 金额字符串
     * @throws Exception 异常
     * @since 4.0
     */
    public static String changeLiToYuan(String amount) throws Exception {
        if (!amount.matches(CURRENCY_FEN_REGULAR)) {
            throw new Exception("金额格式有误");
        }
        return BigDecimal.valueOf(Long.valueOf(amount)).divide(new BigDecimal(1000)).toString();
    }


    public static void main(String[] args) {
        System.out.println(49+31.5+51.5+31.5+41.5+46.5+41.5+36.5+39+39+49+41.5+39+41.5+39+39+39+36.5+39+39+36.5+49+43+46.5+35.5+43+51.5+44+36.5+39+36.5+39+39+46.5+46.5+39+36.5+36.5+39+39+39+51.5+49);
        System.out.println(1771.5-43*25);
    }

}
